import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * Problema da mochila binaria
 * 
 */
public class Main990_2 {

	static int capacidadeTotal;
	static int quantidadeTesouros;

	static int[] profundidades;
	static int[] valores;
	static int[] capacidadesGastas;

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		while (sc.hasNextLine()) {

			String[] entrada = sc.nextLine().split(" ");

			capacidadeTotal = Integer.parseInt(entrada[0]);
			int constante = Integer.parseInt(entrada[1]);

			quantidadeTesouros = Integer.parseInt(sc.nextLine());

			profundidades = new int[quantidadeTesouros];
			valores = new int[quantidadeTesouros];
			capacidadesGastas = new int[quantidadeTesouros];

			for (int i = 0; i < quantidadeTesouros; i++) {

				String[] tesouro = sc.nextLine().split(" ");

				profundidades[i] = Integer.parseInt(tesouro[0]);
				valores[i] = Integer.parseInt(tesouro[1]);
				capacidadesGastas[i] = 3 * constante * profundidades[i];

			}

			executa();

			System.out.println("nextLine: " + sc.nextLine());
		}
	}

	private static void executa() {

		int maiorSomaDeValores = -1;
		
		int[] combinacaoDeMaiorSoma = null;

		int[] combinacao = new int[quantidadeTesouros];

		for (int i = 1; i < Math.pow(2, quantidadeTesouros); i++) {

			int gastoParaCombinacao = calculaCusto(combinacao);

			if (gastoParaCombinacao <= capacidadeTotal) {

				int somaDeValores = calculaSomaDeValores(combinacao);
				if (somaDeValores > maiorSomaDeValores) {
					combinacaoDeMaiorSoma = combinacao.clone();
					maiorSomaDeValores = somaDeValores;
				}

			}

			combinacao = getProximaCombinacao(combinacao);
		}

		System.out.println(maiorSomaDeValores);

		System.out.println(calculaQuantidadeDeTesouros(combinacaoDeMaiorSoma));

		for (int i = 0; i < quantidadeTesouros; i++) {
			if (combinacaoDeMaiorSoma[i] == 1) {
				System.out.println(profundidades[i] + " " + valores[i]);
			}
		}

	}

	private static int calculaQuantidadeDeTesouros(int[] combinacao) {

		int resultado = 0;

		for (int i = 0; i < quantidadeTesouros; i++) {
			resultado += combinacao[i];
		}

		return resultado;
	}

	private static int calculaSomaDeValores(int[] combinacao) {

		int resultado = 0;

		for (int i = 0; i < quantidadeTesouros; i++) {
			resultado += combinacao[i] * valores[i];
		}

		return resultado;
	}

	private static int calculaCusto(int[] combinacao) {

		int resultado = 0;

		for (int i = 0; i < quantidadeTesouros; i++) {
			resultado += combinacao[i] * capacidadesGastas[i];
		}

		return resultado;
	}

	private static int[] getProximaCombinacao(int[] combinacao) {

		int[] resultado = combinacao.clone();

		for (int i = quantidadeTesouros - 1; i >= 0; i--) {

			if (resultado[i] == 0) {
				resultado[i] = 1;
				return resultado;
			} else {
				resultado[i] = 0;
			}

		}

		return resultado;

	}

}
